////////////////////////////////////////////////////////////////////////////////

#include "arraystream.h"

using namespace std;

////////////////////////////////////////////////////////////////////////////////

arraystream::arraystream(char* buffer, size_t size)
{
  m_buffer = buffer;
  m_size = size-1;
  setg(buffer, buffer, buffer + size);
  setp(buffer, buffer + size);
}

////////////////////////////////////////////////////////////////////////////////

arraystream::~arraystream()
{
  finalize();
}

////////////////////////////////////////////////////////////////////////////////

char* arraystream::get_buffer()
{
  return pptr();
}

////////////////////////////////////////////////////////////////////////////////

unsigned int arraystream::get_available_size() const
{
  return (unsigned int) max((size_t) 0, (size_t) (epptr()-pptr()));
}

////////////////////////////////////////////////////////////////////////////////

int arraystream::tellp() const
{
  return (int) (pptr()-pbase());
}

////////////////////////////////////////////////////////////////////////////////

void arraystream::pbump(int count)
{
  streambuf::pbump(count);
}

////////////////////////////////////////////////////////////////////////////////

char* arraystream::finalize()
{
  sync();
  m_buffer[min((size_t) (pptr()-pbase()), m_size)] = '\0';
  return m_buffer;
}

////////////////////////////////////////////////////////////////////////////////
